home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / snmp_sysDesc.nasl < prev    next >
Text File  |  2005-01-14  |  3KB  |  123 lines

  1. #
  2. # This script was written by Renaud Deraison <deraison@cvs.nessus.org>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6.  
  7.  
  8. if(description)
  9. {
  10.  script_id(10800);
  11.  script_version ("$Revision: 1.12 $");
  12.  
  13.  name["english"] = "Obtain OS type via SNMP";
  14.  
  15.  script_name(english:name["english"]);
  16.  
  17.  desc["english"] = "
  18. This script uses SNMP to obtain the remote operating
  19. system type and version.
  20.  
  21. Risk factor : Low";
  22.  
  23.  script_description(english:desc["english"]);
  24.  
  25.  summary["english"] = "Enumerates OS via SNMP";
  26.  script_summary(english:summary["english"]);
  27.  
  28.  script_category(ACT_GATHER_INFO);
  29.  
  30.  script_copyright(english:"This script is Copyright (C) 2001 Renaud Deraison");
  31.  family["english"] = "SNMP";
  32.  script_family(english:family["english"]);
  33.  
  34.  script_dependencie("snmp_default_communities.nasl");
  35.  script_require_keys("SNMP/community");
  36.  exit(0);
  37. }
  38.  
  39.  
  40. #
  41. # Solaris comes with a badly configured snmpd which
  42. # always reply with the same value. We make sure the answers
  43. # we receive are not in the list of default values usually
  44. # answered...
  45. #
  46. function valid_snmp_value(value)
  47. {
  48.  if("/var/snmp/snmpdx.st" >< value)return(0);
  49.  if("/etc/snmp/conf" >< value)return(0);
  50.  if( (strlen(value) == 1) && (ord(value[0]) < 32) )return(0);
  51.  return(1);
  52. }
  53.  
  54. #--------------------------------------------------------------------#
  55. # Forges an SNMP GET NEXT packet                                     #
  56. #--------------------------------------------------------------------#
  57. function get_next(community, id, object)
  58. {
  59.  len = strlen(community);
  60. #display("len : ", len, "\n");
  61.  len = len % 256;
  62.  
  63.  tot_len = 4 + strlen(community) + 12 + strlen(object) + 4;
  64. # display(hex(tot_len), "\n");
  65.  _r = raw_string(0x30, tot_len, 0x02, 0x01, 0x00, 0x04, len);
  66.  o_len = strlen(object) + 2;
  67.  
  68.  a_len = 13 + strlen(object);
  69.  _r = _r + community + raw_string( 0xA1,
  70.     a_len, 0x02, 0x01, id,   0x02, 0x01, 0x00, 0x02,
  71.     0x01, 0x00, 0x30,o_len) + object + raw_string(0x05, 0x00);
  72. # display("len : ", strlen(_r), "\n");
  73.  return(_r);
  74. }
  75.  
  76.  
  77.  
  78. community = get_kb_item("SNMP/community");
  79. if(!community)exit(0);
  80.  
  81. ifaces = "";
  82.  
  83. port = get_kb_item("SNMP/port");
  84. if(!port)port = 161;
  85.  
  86. soc = open_sock_udp(port);
  87.  
  88. first = raw_string(0x30, 0x82, 0x00, 
  89.            0x0B, 0x06, 0x07, 0x2b, 0x06, 0x01, 0x02, 0x01,
  90.            0x01, 0x01);
  91.           
  92. id = 2;
  93. req = get_next(id:id, community:community, object:first);
  94.  
  95. send(socket:soc, data:req);
  96. r = recv(socket:soc, length:1025);
  97. if(strlen(r) < 48)exit(0);
  98.  
  99. sysDesc = "";
  100.  
  101. len = strlen(r);
  102. if(ord(r[2]) == 0x02)
  103. {
  104.  start = 34 + strlen(community);
  105. }
  106. else
  107. {
  108. start = 38 + strlen(community);
  109. }
  110.  
  111. for(i=start;i<len;i=i+1)
  112. {
  113.   if( (ord(r[i]) >= 10) && (ord(r[i]) <= 127) )
  114.      sysDesc = string(sysDesc, r[i]);
  115. }
  116.  
  117. if(valid_snmp_value(value:sysDesc))
  118. {
  119. set_kb_item(name:"SNMP/sysDesc", value:sysDesc);
  120. report = string("Using SNMP, we could determine that the remote operating system is :\n", sysDesc);
  121. security_note(port:port, data:report, protocol:"udp");
  122. }
  123.